package Demo27;

import java.io.File;
import java.util.Scanner;

public class Demo27 {
    //记录文件是否存在
    public static boolean count = true;

    public static void main(String[] args) {
        while(true) {
            // 每次查找前重置 count 变量
            count = true;
            //用户输入要查询的文件名
            Scanner scanner = new Scanner(System.in);
            System.out.println("此程序用来进行文件的查找和删除");
            System.out.println("温馨提示，输入的目录要符合d: 或者 d:/User/...的格式");
            System.out.println("请输入要查询的目录: ");
            String dir = scanner.next();
            scanner.nextLine();
            System.out.println("请输入要查询的文件名(文件名可以是部分名称): ");
            String filename = scanner.next();
            scanner.nextLine();

            //判断目录是否存在
            File rootFile = new File(dir);
            if(!rootFile.isDirectory()) {
                System.out.println("目录不存在!");
                System.out.println();
                continue;
            }

            //进行搜索，递归遍历目录中所有的文件和子目录
            scanDir(rootFile,filename);

            if(count == true) {
                System.out.println("文件不存在，或者文件名输入错误！");
            }

            System.out.println("输入 1 继续查找，输入 0 退出程序");

            int a = 0;
            while(true) {
                if(scanner.hasNextInt()) {
                    a = scanner.nextInt();
                    if(a == 1) {
                        break;
                    }else if(a == 0) {
                        return;
                    }else {
                        System.out.println("输入的数字无效，请重新输入: ");
                        // 除去无效输入的内容
                        scanner.nextLine();
                    }
                }else {
                    System.out.println("输入错误，请输入数字: ");
                    //除去无效输入的内容
                    scanner.nextLine();
                }
            }
        }
    }

    private static void scanDir(File rootFile, String filename) {
        //列出 rootFile 中的内容
        File[] files = rootFile.listFiles();
        if(files == null) {
            //空目录
            return;
        }

        //遍历 files 数组，判断每个元素的类型
        for (File file : files) {
            if(file.isDirectory()) {
                //是一个目录，递归调用 scanDir 方法.
                scanDir(file,filename);
            }else if(file.isFile()) {
                //是一个文件，判断文件名是否匹配。
                if(file.getName().contains(filename)) {
                    tryDelete(file);
                    count = false;
                }
            }
        }
    }

    private static void tryDelete(File file) {
        System.out.println("已找到该文件，文件路径为：" + file.getAbsolutePath());
    }
}
